const financialService = require('../../../services/financial');
const calculator = require('../../../utils/calculator');

// 常量配置
const PROFIT_TYPES = {
  FIXED: 'fixed',
  FLOAT: 'float'
};

const DEFAULT_FORM = {
  name: '',           // 产品名称
  type: '',          // 产品类型
  money: '',         // 投资金额
  buyDate: '',    // 起始日期
  endDate: '',      // 到期日期
  bank: '',       // 银行ID
  remark: ''         // 备注
};
// 产品类型选项
const { TYPE_OPTIONS, BANK_OPTIONS } = require('../../../utils/dict'); 

Page({
  data: {
    loading: false,
    form: { ...DEFAULT_FORM },
    typeOptions: TYPE_OPTIONS, // 直接使用导入的配置
    bankOptions: BANK_OPTIONS  // 直接使用导入的配置
  },
    selectedTypeName: '', // 添加选中的类型名称
    selectedBankName: '', // 添加选中的银行名称
    // 表单配置
    sections: [
      {
        id: 'basic',
        title: '基本信息',
        fields: [
          {
            type: 'input',
            field: 'name',
            label: '产品名称',
            placeholder: '请输入产品名称',
            maxlength: 40,  /* 新增字符长度限制 */
            inputType: 'text'  /* 明确输入类型为文本 */
          },
          {
            type: 'picker',
            field: 'type',
            label: '产品类型',
            options: TYPE_OPTIONS,
            getText: (value) => {
              const option = TYPE_OPTIONS.find(opt => opt.id === value);
              return option ? option.name : '请选择产品类型';
            }
          },
          {
            type: 'input',
            field: 'money',
            label: '投资金额',
            inputType: 'digit',
            placeholder: '请输入投资金额'
          },
          {
            type: 'picker',
            field: 'buyDate',
            label: '购买日期',
            mode: 'date',
            getText: (value) => value || '请选择购买日期'
          },
          {
            type: 'picker',
            field: 'end_date',
            label: '到期日期',
            mode: 'date',
            getText: (value) => value || '请选择到期日期'
          }
        ]
      },
      {
        id: 'other',
        title: '其他信息',
        fields: [
          {
            type: 'picker',
            field: 'bank',
            label: '发行银行',
            options: BANK_OPTIONS,
            getText: (value) => {
              const bank = BANK_OPTIONS.find(b => b.id === value);
              return bank ? bank.name : '请选择银行';
            }
          },
          {
            type: 'textarea',
            field: 'remark',
            label: '备注',
            placeholder: '请输入备注信息'
          }
        ]
      }
    ],
  onLoad() {
    // 设置默认日期为今天
    const today = new Date().toISOString().split('T')[0];
    this.setData({
      'form.buyDate': today
    });
  },

  // 防抖处理
  debounce(func, wait = 500) {
    let timeout;
    return function (...args) {
      clearTimeout(timeout);
      timeout = setTimeout(() => func.apply(this, args), wait);
    };
  },

  // 处理输入框变化（使用防抖）
  handleInput: function(e) {
    const { field } = e.currentTarget.dataset;
    const { value } = e.detail;
    
    this.debounceSetData(field, value);
  },

  // 防抖设置数据
  debounceSetData: function(field, value) {
    this.debounce(() => {
      this.setData({
        [`form.${field}`]: value
      });
    })();
  },

  // 处理日期选择
  checkProfitVisibility() {
    const startDate = this.data.form.buyDate;
    if (!buyDate) {
      this.setData({ isShowProfit: false });
      return;
    }
    
    // 获取当前日期（只比较年月日）
    const today = new Date().toISOString().split('T')[0]; // 格式化为YYYY-MM-DD
    this.setData({
      isShowProfit: buyDate < today // 购买日期在今天之前时显示
    });
  },

  // 修改：日期选择回调
  handleDateChange(e) {
    const { field } = e.currentTarget.dataset;
    const value = e.detail.value;
    this.setData({
      [`form.${field}`]: value
    }, () => {
      // 当起始日期变化时，重新检查是否显示收益字段
      if (field === 'startDate') {
        this.checkProfitVisibility();
      }
    });
  },

  // 处理类型选择
  handleTypeChange(e) {
    const index = e.detail.value;
    const selectedType = this.data.typeOptions[index];
    this.setData({
      'form.type': selectedType.id,
      'selectedTypeName': selectedType.name
    });
  },

  // 处理银行选择
  handleBankChange(e) {
    const index = e.detail.value;
    const selectedBank = this.data.bankOptions[index];
    this.setData({
      'form.bank_id': selectedBank.id,
      'selectedBankName': selectedBank.name
    });
  },

  // 表单验证
  validateForm() {
    const { form } = this.data;
    const errors = [];
    console.log(form)
    // 基本信息验证
    if (!form.name.trim()) {
      errors.push('请输入产品名称');
    }

    if (!form.type) {
      errors.push('请选择产品类型');
    }

    if (!form.money || isNaN(form.money) || form.money <= 0) {
      errors.push('请输入正确的投资金额');
    }

    if (!form.start_date) {
      errors.push('请选择起始日期');
    }

    if (!form.end_date) {
      errors.push('请选择到期日期');
    }

    if (form.end_date && new Date(form.end_date) <= new Date(form.start_date)) {
      errors.push('到期日期必须晚于起始日期');
    }

    if (!form.bank_id) {
      errors.push('请选择银行');
    }

    // 如果有错误，显示第一个错误
    if (errors.length > 0) {
      wx.showToast({
        title: errors[0],
        icon: 'none'
      });
      return false;
    }

    return true;
  },

  // 重置表单
  resetForm() {
    const today = new Date().toISOString().split('T')[0];
    this.setData({
      form: {
        name: '',
        type: '',
        money: '',
        start_date: today,
        end_date: '',
        bank_id: '',
        remark: ''
      },
      selectedTypeName: '',
      selectedBankName: ''
    });
  },

  // 提交表单
  async handleSubmit() {
    if (!this.validateForm()) return;

    try {
      this.setData({ loading: true });

      const { form } = this.data;
      
      // 准备提交的数据
      const data = {
        ...form,
        money: parseFloat(form.money),
        start_date: form.start_date,
        end_date: form.end_date,
        create_time: new Date().toISOString()
      };

      await financialService.addFinancial(data);

      wx.showToast({
        title: '添加成功',
        icon: 'success'
      });

      // 返回上一页
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);

    } catch (error) {
      console.error('添加失败:', error);
      wx.showToast({
        title: '添加失败',
        icon: 'error'
      });
    } finally {
      this.setData({ loading: false });
    }
  },
  // 返回主页
  goToHome() {
    wx.switchTab({
      url: '/pages/financial/index/index'
    });
  },
  // 页面卸载时清理
  onUnload() {
    // 清除可能存在的定时器
    if (this.debounceSetData.timeout) {
      clearTimeout(this.debounceSetData.timeout);
    }
  }
});